home *** CD-ROM | disk | FTP | other *** search
- /***************************************************************************
- kommanderwidget.h - Text widget core functionality
- -------------------
- copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
- (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
-
- ***************************************************************************/
-
- /***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-
- #ifndef _HAVE_KOMMANDERWIDGET_H_
- #define _HAVE_KOMMANDERWIDGET_H_
-
- /* KDE INCLUDES */
- #include <kprocess.h>
-
- #include "kommander_export.h"
- /* QT INCLUDES */
- #include <qmap.h>
- #include <qobject.h>
- #include <qpair.h>
- #include <qstring.h>
- #include <qstringlist.h>
-
- class ParserData;
-
- class KOMMANDER_EXPORT KommanderWidget
- {
- friend class MyProcess;
- public:
- KommanderWidget(QObject *);
- virtual ~KommanderWidget();
-
- //List of available states. Most widgets have only one state, but f. e. radiobutton has both
- // 'checked' and 'unchecked'
- virtual QStringList states() const;
- virtual QStringList displayStates() const;
- virtual QString currentState() const = 0;
-
- virtual bool isKommanderWidget() const = 0;
-
- // Associated script
- virtual void setAssociatedText(const QStringList& a_associations);
- virtual QStringList associatedText() const;
- virtual bool hasAssociatedText();
-
- // Execute default script, expanding all @macros.
- virtual QString evalAssociatedText();
- // Execute given script, expanding all @macros.
- virtual QString evalAssociatedText(const QString&);
- // Evaluate given Kommander function using given args.
- virtual QString evalFunction(const QString& function, const QStringList& args);
- // Parse and evaluate function for given widget, converting it to appropriate DCOP call.
- virtual QString evalWidgetFunction(const QString& identifier, const QString& s, int& pos);
- // Evaluate given array function using given args.
- virtual QString evalArrayFunction(const QString&, const QStringList&);
- // Parse and evaluate given execBegin..execEnd block.
- virtual QString evalExecBlock(const QStringList&, const QString& s, int& pos);
- // Parse and evaluate given forEach..end block.
- virtual QString evalForEachBlock(const QStringList&, const QString& s, int& pos);
- // Parse and evaluate given for..end block.
- virtual QString evalForBlock(const QStringList&, const QString& s, int& pos);
- // Parse and evaluate given switch..case..end block.
- virtual QString evalSwitchBlock(const QStringList&, const QString& s, int& pos);
- // Parse and evaluate given if..endif block.
- virtual QString evalIfBlock(const QStringList&, const QString& s, int& pos);
- // Population text. It will become widgetText after populate() is called
- virtual QString populationText() const;
- virtual void setPopulationText(const QString&);
- virtual void populate() = 0;
-
- // Handles all widget-specific DCOP calls
- virtual QString handleDCOP(int function, const QStringList& args = QStringList());
- // Checks if appropriate function is supported by widget. By default all functions
- // are reported as supported: use this to allow recognizing incorrect function calls.
- virtual bool isFunctionSupported(int function);
- // Checks if the function is common widget function (i. e. supported by all widgets)
- virtual bool isCommonFunction(int function);
- // Checks if the string is a valid widget name)
- virtual bool isWidget(const QString& a_name) const;
- // Returns widget from name
- virtual KommanderWidget* widgetByName(const QString& a_name) const;
- // Returns current widget name;
- virtual QString widgetName() const;
- // Returns filename associated with the dialog
- virtual QString fileName();
-
- QObject* object() { return m_thisObject;}
-
-
- // Recognizes editor vs executor mode
- static bool inEditor;
- // Prints errors in message boxes, not in stderr
- static bool showErrors;
- // Default parser
- static bool useInternalParser;
- // Return global variable value
- QString global(const QString& variableName);
- // Set global variable value
- void setGlobal(const QString& variableName, const QString& value);
-
- protected:
- virtual void setStates(const QStringList& a_states);
- virtual void setDisplayStates(const QStringList& a_displayStates);
-
- // Execute DCOP query and return its result or null on failure
- // Only QString and int are now handled
- QString DCOPQuery(const QStringList& args);
- QString localDCOPQuery(const QString function, const QStringList& args = QStringList());
- QString localDCOPQuery(const QString function, const QString& arg1,
- const QString& arg2, const QString& arg3 = QString::null,
- const QString& arg4 = QString::null);
- // Execute given command, return its result
- QString execCommand(const QString& a_command, const QString& a_shell = QString::null) const;
- // Find and run dialog (with optional parameters)
- QString runDialog(const QString& a_dialog, const QString& a_params = QString::null);
- // Display error message a_error; display current class name if no other is given
- void printError(const QString& a_error) const;
- // Auxiliary functions for parser
- // Find matching brackets starting from current position
- QString parseBrackets(const QString& s, int& from, bool& ok) const;
- // Return identifier: the longest string of letters and numbers starting from i
- QString parseIdentifier(const QString& s, int& from) const;
- // Parse arguments for given function. Returns list of arguments without quotations
- QStringList parseArgs(const QString& s, bool &ok);
- // Remove quotes from given identifier
- QString parseQuotes(const QString& s) const;
- // Parse function
- QStringList parseFunction(const QString& group, const QString& function,
- const QString& s, int& from, bool& ok);
- // Detect and return block boundary
- int parseBlockBoundary(const QString& s, int from, const QStringList& args) const;
-
- // Parse given identifier as widget name
- KommanderWidget* parseWidget(const QString& name) const;
- // Return parent dialog of this widget
- QWidget* parentDialog() const;
- QString substituteVariable(QString text, QString variable, QString value) const;
-
- ParserData* internalParserData() const;
-
- QObject *m_thisObject;
- QStringList m_states;
- QStringList m_displayStates;
- QStringList m_associatedText;
- QString m_populationText;
-
- // Internal parser data
- static ParserData* m_parserData;
- };
-
-
- #define ESCCHAR '@'
-
- #endif
-